/*******************************************************************************
 * @author scl
 * @email shchlu188@163.com
 * @brief 网络任务： 和外部通信（ESP8266 模块）
 ******************************************************************************/


#include "app_task.h"
#include "cmsis_os.h"
#include "module_esp8266.h"

extern data_frame_t esp_rx_frame;

static void delay(uint32_t ms) {
    osDelay(ms);
}

static void lock() {
    taskENTER_CRITICAL();
}

static void unlock() {
    taskEXIT_CRITICAL();
}

static void run(void const *argument) {
    /*重新修改esp8266使用的delay,使用os中的*/
    esp8266_set_delay_call(delay);
    os_log_set_lock(lock);
    os_log_set_unlock(unlock);
    while (1) {
        if (esp_rx_frame.InfBit.frame_finished_flag) {
            esp_sta_tcp_server_request_handle(esp_rx_frame.p_rx_buf, esp_rx_frame.InfBit.frame_len);
        }
        osDelay(100);
    }
}

/** osThreadId 为（void *）类型的通用指针 */
osThreadId esp_net_thread; /*ESP8266线程句柄的指针*/

/**
 * @brief 系统时钟初始化
 */
static void thread_init(void) {
    // 任务定义
    osThreadDef(defaultTask, run, osPriorityNormal, 0, 256);
    // 任务创建
    esp_net_thread = osThreadCreate(osThread(defaultTask), NULL);
}

RTOS_THREAD_EXPORT(sys_clock, thread_init);